package sun.superstring;

import java.util.Scanner;

public class ArrayDemo2 {
    public static void main(String[] args) {
        // 目标：掌握数组的另一种定义，动态初始化数组
        // 假设班级里有8名同学，录入这8名同学的java成绩，成绩类型是小数，并输出平均分，最高分，最低分
        inputScores();

    }

    // 设计一个方法，录入学生的成绩
    public static void inputScores() {
        // 1. 需要一个数组来存储8名同学的成绩
        // 动态初始化数组，只确定数组的类型和存储数据的容量
        // 数据类型 [] 数组名 = new 数据类型 [数组容量];
        double [] scores = new double [8];
        //        scores = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
        //                   0    1    2    3    4    5    6    7

        Scanner sc = new Scanner(System.in);
        // 2. 录入8个同学的java成绩，并把成绩存入数组中
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个同学的java成绩：");
            scores[i] = sc.nextDouble();
        }

        // 3. 遍历数组，统计总分，统计最高分，统计最低分，算平均成绩
        double allScore = scores[0];
        double max = scores[0];
        double min = scores[0];
        // 从数组的第二个位置开始遍历
        for (int i = 1; i < scores.length; i++) {
            if (scores[i] > max) {
                max = scores[i];
            }
            if (scores[i] < min) {
                min = scores[i];
            }
            allScore += scores[i];
        }
        System.out.println("总分：" + allScore);
        System.out.println("平均分：" + allScore / scores.length);
        System.out.println("最高分：" + max);
        System.out.println("最低分：" + min);

//        3.代码的优化
//        FindMaxAndMin(scores);

    }

    // 遍历数组，统计总分，统计最高分，统计最低分，算平均成绩
    // 找最值代码的优化：找数组比较浪费性能
    public static void FindMaxAndMin(double scores []) {
        double grade = scores[0];   // 优化一
        double allScore = grade;
        double max = grade;
        double min = grade;
        // 从数组的第二个位置开始遍历
        for (int i = 1; i < scores.length; i++) {
            // 通过一个变量，把当前遍历到的这个分数保存起来，只需要找一次数组
            double score = scores[i];      // 优化二
            if (score > max) {
                max = score;
            }
            if (score < min) {
                min = score;
            }
            allScore += score;
        }
        System.out.println("总分：" + allScore);
        System.out.println("平均分：" + allScore / scores.length);
        System.out.println("最高分：" + max);
        System.out.println("最低分：" + min);

    }

}
